package com.shujia.scala

class MyRichInt(i: Int) {
  def myMax(int: Int): Int = {
    if (int > i) {
      int
    } else {
      i
    }
  }

  def myMin(int: Int): Int = {
    if (int < i) {
      int
    } else {
      i
    }
  }

}

object Demo17Implicit01 {

  // Int => MyRichInt
  implicit def convert2MyRichInt(i: Int): MyRichInt = {
    new MyRichInt(i)
  }

  def main(args: Array[String]): Unit = {

    /**
     * Scala中的隐式转换：在不修改代码的基础上可以给某个类动态的增加方法
     * 同一个作用域下只能存在同一种类型的隐式转换
     * 主要分为三类：
     * 1、隐式转换函数
     * 2、隐式转换变量
     * 3、隐式转换类
     */

    val myRichInt: MyRichInt = new MyRichInt(10)
    println(myRichInt.myMax(5))
    println(myRichInt.myMax(50))

    // 显示转换
    println(convert2MyRichInt(10).myMax(5))
    println(convert2MyRichInt(10).myMax(50))

    // 隐式转换
    println(20.myMax(5))
    println(30.myMax(5))
    println(20.myMax(50))
    println(30.myMax(50))
    println(30.myMin(50))



  }

}
